package es.tikitaka.dao;

import java.util.List;

import es.tikitaka.dictionary.MunicipioDic;
import es.tikitaka.dictionary.PosicionDic;
import es.tikitaka.dictionary.ProvinciaDic;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.equipo.Equipo;
import es.tikitaka.domain.jugador.Jugador;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

public interface JugadorService {

	/**
	 * Método para obtener todos los jugadores registrados en el sistema
	 * independientemente del estado
	 * 
	 * @return lista de todos los jugadores
	 */
	List<Jugador> getList();

	/**
	 * Método para obtener los jugadores coincidentes con los criterios de
	 * búsqueda.
	 * 
	 * @param nombre
	 *            Nombre del jugador
	 * @param apellidos
	 *            Apellidos del jugador
	 * @param temporada
	 *            Temporada para la que se tiene datos
	 * @param equipo
	 *            Equipo en el que ha jugado
	 * @param provincia
	 *            Provincia de procedencia
	 * @param municipio
	 *            Municipio de procedencia
	 * @param Edad
	 *            Edad del jugador
	 * @param posicion
	 *            Posición en el terreno de juego
	 * @return lista de jugadores coincidentes con los criterios
	 */
	List<Jugador> buscar(String nombre, String apellidos, Temporada temporada,
			Equipo equipo, ProvinciaDic provincia, MunicipioDic municipio,
			Integer edad, PosicionDic posicion, StringBuffer s);

	/**
	 * Método para buscar los jugadores coincidentes con el patrón de búsqueda
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @return lista de jugadores coincidentes
	 */
	List<Jugador> buscarActivos(String buscar);

	/**
	 * Método para buscar los jugadores coincidentes con el patrón de búsqueda y
	 * que ademas no tenga asociada ya la temporada que se está pasando por
	 * parámetro
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @param temporada
	 *            Temporada asociada
	 * @return lista de jugadores coincidentes
	 */
	List<Jugador> buscarActivosSinTemporada(String buscar, int en,
			Temporada temporada);

	/**
	 * Método que comprueba si existe en el sistema el dni que se pasa como
	 * parámetro
	 * 
	 * @param dni
	 *            DNI a comprobar
	 * @return estado del proceso (true or false)
	 */
	boolean existeDni(String dni);

	/**
	 * Método para obtener todos los jugadores inactivos en el sistema
	 * 
	 * @return lista de todos los jugadores inactivos
	 */
	List<Jugador> getJugadoresInactivos();

	/**
	 * 
	 * @param jugador
	 * @return
	 */
	Jugador merge(Jugador jugador);

	/**
	 * Método para eliminar un jugador del sistema
	 * 
	 * @param id
	 *            Id del jugador
	 * @return estado del proceso de borrado (true or false)
	 */
	boolean delete(Integer id);

	/**
	 * Método para guardar los cambios sufridos por un jugador del sistema o
	 * para registrar a un nuevo jugador
	 * 
	 * @param jugador
	 *            Jugador a guardar
	 * @return estado del proceso de guardado (true or false)
	 */
	boolean save(Jugador jugador);
}
